package com.galeno.yarn2;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;

/**
 * @author galeno
 * @Title:
 * @Description:
 * @date 2021/7/2417:55
 *  MR程序的map端 : 继承Mapper类
 *   Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>
 *       在MR 内部处理数据是以KV的形式处理的
 *   KIN:  行的起始位置,快速定位  Long
 *   VIN:  行内容              String
 *  -----map(读取任务数据  输出局部结果给redce端聚合汇总)
 *   KOUT:单词       String
 *   VOUT:1        Integer
 *   思考: Map阶段的MT处理数据-->  RT区聚合汇总
 *        MT处理的机器和RT的机器是否在同一个机器
 *        MT(中间结果)  --->  RT 机器上  [数据序列化]
 *   KVIN  KVOUT实现序列化     Serializable[JDK]
 *   1) JDK序列化  臃肿 存储了一些和数据无关的信息{包名 类名 数据类型}
 *     14-->
 *     109-->  大量数据 占用网络 ,带宽  慢
 *   2) 使用HDP的序列化方式 [数据变小]
 *
 *   KIN: Long  ---> LongWritable
 *   vIN:String  --->Text
 *  Integer --->Intwritable
 */
public class WordCountMapper extends Mapper<LongWritable, Text,Text, IntWritable> {
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        String strLine=value.toString();
        String[] s = strLine.split("\\s+");
        for (String str:s
             ) {
            Text kout=new Text(str);
            IntWritable vout = new IntWritable(1);
            context.write(kout,vout);
        }
    }
}
